<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<title>简历</title><link href='https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext' rel='stylesheet' type='text/css' /><style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; --title-bar-height:20px; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
  body.typora-export { padding-left: 0px; padding-right: 0px; }
  #write { padding-left: 20px; padding-right: 20px; }
  .CodeMirror-sizer { margin-left: 0px !important; }
  .CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
  #write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
  .typora-export * { -webkit-print-color-adjust: exact; }
  .typora-export #write { break-after: avoid; }
  .typora-export #write::after { height: 0px; }
  .is-mac table { break-inside: avoid; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
  .md-toc-h4 .md-toc-inner { margin-left: 5em; }
  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
  .md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: hidden; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; zoom: 90%; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; }
.MathJax_SVG * { transition: none 0s ease 0s; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
mark .md-meta { color: rgb(0, 0, 0); opacity: 0.3 !important; }
@media print {
  .typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-require-zoom-fix foreignobject { font-size: var(--mermaid-font-zoom); }


:root {
    --side-bar-bg-color: #fafafa;
    --control-text-color: #777;
}

@include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);

/* open-sans-regular - latin-ext_latin */
  /* open-sans-italic - latin-ext_latin */
    /* open-sans-700 - latin-ext_latin */
    /* open-sans-700italic - latin-ext_latin */
  html {
    font-size: 16px;
}

body {
    font-family: "Fira Code", "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
    color: rgb(51, 51, 51);
    line-height: 1.6;
}

#write {
    max-width: 860px;
  	margin: 0 auto;
  	padding: 30px;
    padding-bottom: 100px;
}

@media only screen and (min-width: 1400px) {
	#write {
		max-width: 1024px;
	}
}

@media only screen and (min-width: 1800px) {
	#write {
		max-width: 1200px;
	}
}

#write > ul:first-child,
#write > ol:first-child{
    margin-top: 30px;
}

a {
    color: #4183C4;
}
h1,
h2,
h3,
h4,
h5,
h6 {
    position: relative;
    margin-top: 1rem;
    margin-bottom: 1rem;
    font-weight: bold;
    line-height: 1.4;
    cursor: text;
}
h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
    text-decoration: none;
}
h1 tt,
h1 code {
    font-size: inherit;
}
h2 tt,
h2 code {
    font-size: inherit;
}
h3 tt,
h3 code {
    font-size: inherit;
}
h4 tt,
h4 code {
    font-size: inherit;
}
h5 tt,
h5 code {
    font-size: inherit;
}
h6 tt,
h6 code {
    font-size: inherit;
}
h1 {
    font-size: 2.25em;
    line-height: 1.2;
    border-bottom: 1px solid #eee;
}
h2 {
    font-size: 1.75em;
    line-height: 1.225;
    border-bottom: 1px solid #eee;
}

/*@media print {
    .typora-export h1,
    .typora-export h2 {
        border-bottom: none;
        padding-bottom: initial;
    }

    .typora-export h1::after,
    .typora-export h2::after {
        content: "";
        display: block;
        height: 100px;
        margin-top: -96px;
        border-top: 1px solid #eee;
    }
}*/

h3 {
    font-size: 1.5em;
    line-height: 1.43;
}
h4 {
    font-size: 1.25em;
}
h5 {
    font-size: 1em;
}
h6 {
   font-size: 1em;
    color: #777;
}
p,
blockquote,
ul,
ol,
dl,
table{
    margin: 0.8em 0;
}
li>ol,
li>ul {
    margin: 0 0;
}
hr {
    height: 2px;
    padding: 0;
    margin: 16px 0;
    background-color: #e7e7e7;
    border: 0 none;
    overflow: hidden;
    box-sizing: content-box;
}

li p.first {
    display: inline-block;
}
ul,
ol {
    padding-left: 30px;
}
ul:first-child,
ol:first-child {
    margin-top: 0;
}
ul:last-child,
ol:last-child {
    margin-bottom: 0;
}
blockquote {
    border-left: 4px solid #dfe2e5;
    padding: 0 15px;
    color: #777777;
}
blockquote blockquote {
    padding-right: 0;
}
table {
    padding: 0;
    word-break: initial;
}
table tr {
    border-top: 1px solid #dfe2e5;
    margin: 0;
    padding: 0;
}
table tr:nth-child(2n),
thead {
    background-color: #f8f8f8;
}
table th {
    font-weight: bold;
    border: 1px solid #dfe2e5;
    border-bottom: 0;
    margin: 0;
    padding: 6px 13px;
}
table td {
    border: 1px solid #dfe2e5;
    margin: 0;
    padding: 6px 13px;
}
table th:first-child,
table td:first-child {
    margin-top: 0;
}
table th:last-child,
table td:last-child {
    margin-bottom: 0;
}

.CodeMirror-lines {
    padding-left: 4px;
}

.code-tooltip {
    box-shadow: 0 1px 1px 0 rgba(0,28,36,.3);
    border-top: 1px solid #eef2f2;
}

.md-fences,
code,
tt {
    border: 1px solid #e7eaed;
    background-color: #f8f8f8;
    border-radius: 3px;
    padding: 0;
    padding: 2px 4px 0px 4px;
    font-size: 0.9em;
}

code {
    background-color: #f3f4f4;
    padding: 0 2px 0 2px;
}

.md-fences {
    margin-bottom: 15px;
    margin-top: 15px;
    padding-top: 8px;
    padding-bottom: 6px;
}


.md-task-list-item > input {
  margin-left: -1.3em;
}

@media print {
    html {
        font-size: 13px;
    }
    table,
    pre {
        page-break-inside: avoid;
    }
    pre {
        word-wrap: break-word;
    }
}

.md-fences {
	background-color: #f8f8f8;
}
#write pre.md-meta-block {
	padding: 1rem;
    font-size: 85%;
    line-height: 1.45;
    background-color: #f7f7f7;
    border: 0;
    border-radius: 3px;
    color: #777777;
    margin-top: 0 !important;
}

.mathjax-block>.code-tooltip {
	bottom: .375rem;
}

.md-mathjax-midline {
    background: #fafafa;
}

#write>h3.md-focus:before{
	left: -1.5625rem;
	top: .375rem;
}
#write>h4.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h5.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h6.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
.md-image>.md-meta {
    /*border: 1px solid #ddd;*/
    border-radius: 3px;
    padding: 2px 0px 0px 4px;
    font-size: 0.9em;
    color: inherit;
}

.md-tag {
    color: #a7a7a7;
    opacity: 1;
}

.md-toc {
    margin-top:20px;
    padding-bottom:20px;
}

.sidebar-tabs {
    border-bottom: none;
}

#typora-quick-open {
    border: 1px solid #ddd;
    background-color: #f8f8f8;
}

#typora-quick-open-item {
    background-color: #FAFAFA;
    border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
    border-style: solid;
    border-width: 1px;
}

/** focus mode */
.on-focus-mode blockquote {
    border-left-color: rgba(85, 85, 85, 0.12);
}

header, .context-menu, .megamenu-content, footer{
    font-family: "Segoe UI", "Arial", sans-serif;
}

.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state{
    visibility: visible;
}

.mac-seamless-mode #typora-sidebar {
    background-color: #fafafa;
    background-color: var(--side-bar-bg-color);
}

.md-lang {
    color: #b4654d;
}

.html-for-mac .context-menu {
    --item-hover-bg-color: #E6F0FE;
}

#md-notification .btn {
    border: 0;
}

.dropdown-menu .divider {
    border-color: #e5e5e5;
}

.ty-preferences .window-content {
    background-color: #fafafa;
}

.ty-preferences .nav-group-item.active {
    color: white;
    background: #999;
}



</style>
</head>
<body class='typora-export'>
<div id='write'  class=''><h1>简历-周文波</h1><p><span class='md-image'><img src="https://file.alonebo.top/mywechat.jpg" style="width: 200px; height: 200px; float:left" ></span></p><div style="display: flex; align-items: center;"><svg t="1613631437096" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2223" width="20" height="20"><path d="M851.083636 684.683636c-113.105455-90.763636-145.92-46.545455-195.258181 3.956364-37.003636 37.003636-127.301818-39.098182-203.403637-116.363636s-154.065455-170.821818-116.363636-203.869091c51.2-51.432727 94.487273-82.152727 3.956363-195.490909s-151.970909-26.763636-201.30909 23.272727c-58.181818 56.087273-4.887273 269.265455 206.894545 482.210909s425.425455 265.541818 482.909091 207.825455c49.338182-49.338182 137.774545-111.010909 23.272727-201.774546z" p-id="2224" "=""></path></svg> <p style="padding-left: 5px"> <span>  13168103370</span> </p></div><div style="display: flex; align-items: center;"><svg t="1613632512747" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1375" width="20" height="20"><path d="M149.6 171.8h691.9c47.2 0 85.9 37.7 86.5 83.9L495.7 493 63.5 256c0.4-46.4 38.8-84.2 86.1-84.2z m-86.1 175l-0.4 419.6c0 46.7 38.9 84.9 86.5 84.9h691.9c47.6 0 86.5-38.2 86.5-84.9V346.6L505.9 572.8c-6.5 3.5-14.3 3.5-20.7 0l-421.7-226z" p-id="1376"></path></svg> <p style="padding-left: 5px"> <span>  aloneobo.zhou@gmail.com</span> </p></div><div style="display: flex; align-items: center;"><svg t="1613632732673" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2114" width="20" height="20"><path d="M512 42.666667A464.64 464.64 0 0 0 42.666667 502.186667 460.373333 460.373333 0 0 0 363.52 938.666667c23.466667 4.266667 32-9.813333 32-22.186667v-78.08c-130.56 27.733333-158.293333-61.44-158.293333-61.44a122.026667 122.026667 0 0 0-52.053334-67.413333c-42.666667-28.16 3.413333-27.733333 3.413334-27.733334a98.56 98.56 0 0 1 71.68 47.36 101.12 101.12 0 0 0 136.533333 37.973334 99.413333 99.413333 0 0 1 29.866667-61.44c-104.106667-11.52-213.333333-50.773333-213.333334-226.986667a177.066667 177.066667 0 0 1 47.36-124.16 161.28 161.28 0 0 1 4.693334-121.173333s39.68-12.373333 128 46.933333a455.68 455.68 0 0 1 234.666666 0c89.6-59.306667 128-46.933333 128-46.933333a161.28 161.28 0 0 1 4.693334 121.173333A177.066667 177.066667 0 0 1 810.666667 477.866667c0 176.64-110.08 215.466667-213.333334 226.986666a106.666667 106.666667 0 0 1 32 85.333334v125.866666c0 14.933333 8.533333 26.88 32 22.186667A460.8 460.8 0 0 0 981.333333 502.186667 464.64 464.64 0 0 0 512 42.666667" p-id="2115"></path></svg> <p style="margin-left: 5px"> <span>  <a href="https://github.com/Baloneo">github.com/Baloneo</a>  </span> </p></div><div style="display: flex; align-items: center;"><svg t="1613632992355" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6596" width="20" height="20"><path d="M440.6656 588.90773333a32.53333333 32.53333333 0 0 1-23.08266667-9.57333333c-76.34986667-76.34986667-76.34986667-200.63253333 0-277.00266667l138.272-138.25173333c36.99093333-37.01226667 86.18453333-57.42293333 138.51093334-57.42293333 52.3072 0 101.48053333 20.41066667 138.51306666 57.42293333 76.3712 76.352 76.3712 200.63253333 0 277.00266667l-69.2864 69.2672c-12.74453333 12.74453333-33.3984 12.74453333-46.12266666 0-12.78613333-12.76586667-12.78613333-33.41866667 0-46.16426667l69.2448-69.24693333c50.92053333-50.92053333 50.92053333-133.77493333 0-184.6752-49.37493333-49.376-135.34186667-49.376-184.69546667 0l-138.272 138.21013333c-50.8992 50.92053333-50.8992 133.79626667 0 184.71573333 12.74773333 12.74453333 12.74773333 33.3984 0 46.144-6.36266667 6.384-14.7328 9.5744-23.0816 9.5744" fill="#000000" p-id="6597"></path><path d="M302.57386667 890.11733333c-50.11626667 0-100.31573333-19.06666667-138.47146667-57.26293333-37.00906667-37.01226667-57.40266667-86.18666667-57.40266667-138.51306667s20.39253333-101.51893333 57.40266667-138.49173333l69.22666667-69.2448c12.76586667-12.76586667 33.44-12.76586667 46.18453333 0 12.74453333 12.74453333 12.74453333 33.3984 0 46.144l-69.24693333 69.24693333c-24.66773333 24.68586667-38.25493333 57.4432-38.25493334 92.34666667 0 34.864 13.5872 67.6608 38.25493334 92.36906667 50.8608 50.8608 133.73653333 50.8608 184.67733333 0l138.2496-138.272c50.9216-50.92053333 50.9216-133.75466667 0-184.656-12.74453333-12.76586667-12.74453333-33.43786667 0-46.1824 12.74666667-12.76586667 33.3984-12.76586667 46.16426667 0 76.352 76.34986667 76.352 200.63253333 0 276.9824l-138.22933334 138.272c-38.2176 38.1952-88.39573333 57.26186667-138.55466666 57.26186666" fill="#000000" p-id="6598"></path></svg> <p style="margin-left: 8px">  <a href="http://alonebo.top"> alonebo.top</a></p></div><hr><div style="display: flex; align-items: center;"><svg t="1613633328598" class="icon" viewBox="0 0 1076 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9491" width="30" height="30"><path d="M598.853745 462.373499C598.853745 459.952694 598.853745 459.952694 596.432942 459.952694L596.432942 459.952694C596.432942 457.53189 594.012134 455.111088 591.591332 452.690283L591.591332 452.690283C589.170529 450.269479 589.170529 447.848676 586.749727 445.427872L584.328924 443.007068C581.908116 440.586263 581.908116 440.586263 579.487314 438.16546 577.066511 438.16546 577.066511 435.744656 574.645709 435.744656L572.224906 433.323852C569.804099 433.323852 567.383296 430.903048 564.962493 430.903048L562.541691 430.903048 560.120883 430.903048 555.279278 430.903048 555.279278 430.903048C548.016865 430.903048 538.33365 430.903048 531.071239 433.323852L492.338379 440.586265C465.709538 447.848676 451.184715 474.477517 458.447127 498.685556 463.288734 513.210378 472.97195 525.314396 485.075968 530.156006L434.239089 716.557896C429.397481 731.082716 434.239089 745.607542 441.5015 757.71156L443.922304 760.132362 446.343109 762.55317C458.447127 774.657188 475.392754 781.919596 494.759183 777.07799L540.754458 764.973972C567.383296 757.71156 581.908122 731.082721 574.645709 706.87468 569.804104 692.34986 560.120883 680.245842 545.596063 675.404232L594.01214 491.423144C601.274547 481.73993 601.274547 472.056714 598.853745 462.373499L598.853745 462.373499ZM661.794642 21.787211C390.664619-50.836903 112.272185 108.936147 39.648072 380.066171-32.976042 651.196196 126.797008 929.588628 397.927032 1002.212741 538.33365 1038.5248 678.74027 1014.316759 792.518047 944.113454L792.518047 944.113454C807.042872 936.851041 816.726088 919.905413 816.726088 902.95979 816.726088 876.330947 794.938854 854.543713 768.310011 854.543713 758.626796 854.543713 748.94358 856.964516 739.260365 864.226929 647.269821 919.905413 533.492045 939.271844 422.135072 907.801395 201.841927 849.702108 73.539327 624.567352 131.638618 404.274209 189.737908 183.981065 414.87266 55.678465 635.165804 113.777756 855.458949 171.877046 983.761551 397.011798 925.662259 617.304945 915.979044 656.037806 899.033416 689.929057 879.666985 723.820308L879.666985 723.820308C874.82538 731.082721 872.404577 740.765937 872.404577 750.449152 872.404577 777.07799 894.191811 798.865224 920.820649 798.865224 937.766277 798.865224 954.711905 789.182008 961.974313 774.657188L961.974313 774.657188C986.182354 733.503524 1005.548785 689.929057 1017.652803 643.933783 1095.11852 372.80376 932.924667 94.411324 661.794642 21.787211L661.794642 21.787211ZM625.482588 317.125272C632.744996 285.654822 615.799373 254.184374 584.328924 246.921962 552.85847 239.659551 521.388025 256.605178 514.125614 288.075626 506.863202 319.546075 523.808829 351.016524 555.279278 358.278936 586.749727 365.541348 618.220175 346.174917 625.482588 317.125272L625.482588 317.125272Z" p-id="9492"></path></svg> <h3 style="padding-left: 5px"> <span>技能简介</span> </h3></div><ul><li><span>男，1998 年出生，23岁</span></li><li><span>求职意向： Python Web、Go Web、Vue.js+Python全栈、智能硬件</span></li><li><span>工作经验：2.5年</span></li><li><span>期望薪资：面议</span></li></ul><p><span>   熟练使用Python，熟练使用Flask、SQLAlchemy、Django、MongoEngine、Vue.js进行Web开发，会使用Go、JavaScript、Java、Shell等语</span></p><p><span>言。能熟练的使用 Linux（Ubuntu/LinutMint/Manjaro）进行日常工作开发，计算机基础知识扎实。理解 TCP/IP 协议、 asyncio、Web、Linux、</span></p><p><span>Docker 等原理。了解微服务开发、可持续集成、Reac、Linux 编程、PyGTK、Flutter等新技术。能够独立搭建运维、后端、前端代码框架。能够看懂英文</span></p><p><span>技术文档。动手解决问题能力强，热爱编程，喜欢使用新兴的技术。</span></p><div style="display: flex; align-items: center;"><svg t="1613633942995" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10284" width="30" height="30"><path d="M512 549.888c-16.384 0-33.28-3.072-48.64-8.704L18.944 378.88C7.68 374.784 0 364.032 0 351.744s7.68-23.04 18.944-27.136l443.904-162.304c31.744-11.264 66.048-11.264 97.792 0l443.904 162.304c11.264 4.096 18.944 14.848 18.944 27.136s-7.68 23.04-18.944 27.136l-443.904 162.304c-15.36 5.632-32.256 8.704-48.64 8.704zM482.816 486.4c18.432 6.656 39.424 6.656 57.856 0l369.664-135.168-369.664-135.168a89.6 89.6 0 0 0-57.856 0.512L113.664 351.744 482.816 486.4z" fill="#333333" p-id="10285"></path><path d="M512 870.4c-89.088 0-169.472-29.696-209.92-47.616-49.664-22.016-109.056-55.808-109.056-91.648V431.616c0-15.872 12.8-29.184 29.184-29.184 15.872 0 29.184 12.8 29.184 29.184v293.888c19.968 21.504 138.24 87.04 260.608 87.04s241.152-65.536 260.608-87.04V431.616c0-15.872 12.8-29.184 29.184-29.184s29.184 12.8 29.184 29.184v299.52c0 35.84-59.392 69.632-109.056 91.648-40.448 17.92-120.832 47.616-209.92 47.616z m262.656-147.456z m-525.312 0zM92.16 681.472c-10.752 0-19.456-8.704-19.456-19.456V375.808c0-10.752 8.704-19.456 19.456-19.456s19.456 8.704 19.456 19.456v286.208c0 10.752-8.704 19.456-19.456 19.456z" fill="#333333" p-id="10286"></path><path d="M92.16 670.208m-48.128 0a48.128 48.128 0 1 0 96.256 0 48.128 48.128 0 1 0-96.256 0Z" fill="#333333" p-id="10287"></path></svg> <h3 style="padding-left: 5px"> 教育经历</h3></div><p><span>全日制专科，河源职业技术学院，嵌入式技术专业，2016 ~ 2019</span></p><div style="display: flex; align-items: center;"><svg t="1613634094193" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12525" width="30" height="30"><path d="M318.577778 819.2L17.066667 512l301.511111-307.2 45.511111 45.511111L96.711111 512l267.377778 261.688889zM705.422222 819.2l-45.511111-45.511111L927.288889 512l-267.377778-261.688889 45.511111-45.511111L1006.933333 512zM540.785778 221.866667l55.751111 11.150222L483.157333 802.133333l-55.751111-11.093333z" fill="#333333" p-id="12526"></path></svg> <h3 style="padding-left: 5px"> <span>工作项目经验</span> </h3></div><h5><a name="广东雅达电子股份有限公司研发部⻔软件工程师实习助理）-2018一个月）" class="md-header-anchor"></a><span>广东雅达电子股份有限公司，研发部⻔，软件工程师（实习/助理）。 2018（一个月）</span></h5><blockquote><p><span>主要负责 Android App 和 Zigbee数据采集开发</span></p></blockquote><p>&nbsp;</p><p><span>项目1：Android 平台智慧农业监控系统</span></p><ol start='' ><li><p><span>实现获取 Android 的串口数据 ,</span></p></li><li><p><span>实现通过 </span><strong><span>socket 得到 ZigBee 的传感器数据</span></strong></p></li><li><p><span>实现实时显示控制摄像头、继电器、各传感器信息</span></p><p>&nbsp;</p></li></ol><p><span>项目2：ZigBee 组网传感器器数据获取</span></p><ol start='' ><li><span>获取温度传感器等模拟量数据</span></li><li><span>通过组网 + 串口的方式给上层 WIFI 网关提供数据。</span></li></ol><p>&nbsp;</p><hr><h5><a name="广东国机智能电力科技有限公司软件部⻔python-工程师实习工作）-201901--202003" class="md-header-anchor"></a><span>广东国机智能电力科技有限公司，软件部⻔，Python 工程师（实习+工作）。 2019.01 ~ 2020.03 </span></h5><blockquote><p><span>主要负责开发 ROS 机器人的任务调度系统以及Python Web业务上的开发</span></p></blockquote><p>&nbsp;</p><p><span>项目1：维护Django框架的机器人任务控制管理系统</span></p><ol start='' ><li><p><span>使用了 Celery+RabbitMQ 执行并发任务</span></p></li><li><p><span>前端使用Vue.js+Element</span></p></li><li><p><span>维护更新一些项目上的Bug和客户的需求</span></p><p><span>    </span></p></li></ol><p><span>项目2：开发基于Python RQ的机器人任务调度系统，实现机器人定时任务下发处理、任务中断暂停、自动回桩充电等功能。（由于旧系统基于Celery进行任务调度，灵活和稳定欠缺）</span></p><ol start='' ><li><p><span>使用 Python RQ 库作为消息队列框架发布存储任务</span></p></li><li><p><span>使用 MongoDB 作为任务日志存储</span></p></li><li><p><span>使用 ZeroRPC 封装成 RPC 接口给其它应用服务调用</span></p></li><li><p><span>Ubuntu+Docker+Docker-Composer</span></p></li><li><p><span>Redis 实现进程间通信</span></p></li><li><p><span>利用Linux的进程信号等机制实现</span><strong><span>任务中断恢复</span></strong></p><p><span>    </span></p></li></ol><p><span>项目3：使用Python封装海康摄像头并提供Web服务</span></p><ol start='' ><li><span>实现通过 Python 的 ctypes 封装调用海康摄像头的 </span><strong><span>so 库</span></strong><span>文件</span></li><li><span>通过 Sanic 异步框架 + 进程池实现并发请求</span></li><li><span>封装视觉小组的图像识别训练后的模型，提供HTTP接口</span></li></ol><p>&nbsp;</p><hr><h5><a name="广州科通达信息科技有限公司软件部⻔python后端工程师-202003" class="md-header-anchor"></a><span>广州科通达信息科技有限公司，软件部⻔，Python后端工程师。 2020.03~?</span></h5><blockquote><p><span>后端框架设计搭建、微信小程序、开放平台开发、智能硬件云端开发、系统运维</span></p></blockquote><p>&nbsp;</p><p><span>项目1：智能臭氧消毒器APP、PC后端，基于EMQ X+Flask+MongoDB（MongoEngine）+MySQL的设备控制查看、设备多用户共享等功能</span></p><ol start='' ><li><p><span>开发微信登录、帐号登录、手机号登录、PC扫码登录</span></p></li><li><p><span>开发PC扫码支付功能，用于用户支付设备额外产生的费用</span></p></li><li><p><span>开发用户</span><strong><span>扫码绑定设备</span></strong><span>、用户分享设备、删除设备等设备管理功能</span></p></li><li><p><span>实现前端发送HTTP设备控制报文转发给指定设备从而实现设备通信控制</span></p></li><li><p><span>设备上传日志记录、用户控制记录查询、消杀统计、授权管理</span></p></li><li><p><span>Docker+Gunicorn+Docker Nginx实现</span><strong><span>不宕机</span></strong><span>更新</span></p></li><li><p><span>实现设备上线下线通知（极光推送）</span></p></li><li><p><a href='https://med.cotodo.com/' target='_blank' class='url'>https://med.cotodo.com/</a></p><p>&nbsp;</p></li></ol><p><span>项目2：基于Go、Gin的设备状态、日志、MQTT发布订阅权限检验 后端系统</span></p><ol start='' ><li><p><span>使用paho.mqtt.golang+mgo库订阅MQTT，处理设备上发的日志，存储到MongoDB</span></p></li><li><p><span>使用Gin搭建HTTP MQTT</span><strong><span>权限校验服务</span></strong><span>供EMQ X回调</span></p></li><li><p><span>使用明文+签名(asscess_key)的方式验证MQTT连接的密码，提高MQTT连接安全性</span></p><p>&nbsp;</p></li></ol><p><span>项目3：科通达后台管理系统，实现完整的设备管理、APP版本管理、用户管理等</span></p><ol start='' ><li><p><span>七牛云文件管理</span></p></li><li><p><span>各种增删改查的表单管理</span></p></li><li><p><a href='https://pangu.cotodo.com/' target='_blank' class='url'>https://pangu.cotodo.com/</a></p><p><span>  </span></p></li></ol><p><span>项目4：企业微信小程序下的智能电箱后端</span></p><ol start='' ><li><span>实现小程序的登陆、用户身份识别</span></li><li><span>实现</span><strong><span>企业微信智能硬件</span></strong><span>直接扫码添加、删除电箱</span></li><li><span>实现企业微信小程序定时推送消息功能（Python RQ）</span></li></ol><p>&nbsp;</p><div style="display: flex; align-items: center;"><svg t="1613634196746" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13979" width="30" height="30"><path d="M695.765333 981.333333h-276.053333c-26.794667 0-47.317333-21.077333-47.317333-48.64V739.84c0-29.184 6.314667-56.746667 17.365333-81.066667-129.365333-48.64-214.528-150.784-214.528-264.277333 0-53.504 17.365333-103.765333 50.474667-147.498667-12.629333-42.154667-15.786667-95.658667-12.629334-157.269333C216.234667 62.122667 236.8 42.666667 261.973333 42.666667c14.208 0 134.101333 1.621333 203.52 64.853333a504.448 504.448 0 0 1 184.533334 0C717.866667 44.288 837.717333 42.666667 853.504 42.666667c25.216 0 45.738667 19.456 47.317333 45.397333 4.693333 61.610667 0 115.114667-12.629333 157.269333C921.301333 290.688 938.666667 340.906667 938.666667 392.832c0 113.493333-85.162667 215.637333-214.528 264.277333a207.786667 207.786667 0 0 1 17.365333 81.066667v192.896c1.578667 27.562667-20.48 50.261333-45.738667 50.261333z m-228.693333-97.28h181.333333V739.84c0-27.562667-12.586667-53.504-33.109333-71.338667-14.165333-11.349333-20.48-30.805333-15.786667-50.261333 4.778667-17.834667 18.944-32.426667 36.309334-35.669333 123.050667-24.32 208.213333-102.144 208.213333-189.696 0-47.018667-25.258667-82.688-45.738667-105.386667-14.208-14.549333-17.365333-35.626667-7.893333-55.082667 6.314667-12.970667 15.786667-40.533333 15.786667-89.173333-39.466667 6.485333-85.205333 19.456-102.528 45.397333-11.093333 16.213333-31.573333 24.32-50.474667 19.456a393.045333 393.045333 0 0 0-194.005333 0c-18.944 4.864-37.888-3.242667-50.474667-19.456-17.365333-25.941333-63.146667-38.912-102.528-45.397333 1.578667 48.64 9.429333 76.202667 15.786667 89.173333 7.850667 17.834667 4.693333 40.533333-7.936 55.082667-20.48 22.698667-45.738667 58.368-45.738667 105.386667 0 87.552 85.205333 163.754667 208.213333 189.696 17.365333 3.242667 31.573333 17.834667 36.266667 35.669333 4.736 17.834667-1.578667 37.290667-15.786667 50.261333a95.104 95.104 0 0 0-33.109333 71.296v144.298667h3.157333z" p-id="13980"></path><path d="M403.968 788.394667c-212.949333 0-309.162667-194.56-313.898667-202.666667-11.050667-24.32-1.578667-53.461333 20.48-64.810667 23.68-11.349333 52.053333-1.621333 63.146667 21.077334 3.114667 6.485333 80.426667 157.269333 241.28 149.162666 26.837333-1.621333 48.896 19.456 48.896 46.976 1.578667 27.562667-18.901333 50.261333-45.738667 50.261334h-14.165333z" p-id="13981"></path></svg> <h3 style="padding-left: 5px"> <span>个人开源项目</span> </h3></div><p><span class='md-image'><img src="https://file.alonebo.top/resume_github01.png" style="float: left"/></span></p><p>&nbsp;</p><p><span class='md-image'><img src="https://camo.githubusercontent.com/17a35c80c5f1f26656bbcac23d86669f07adf7016099a4abbb90ee4722e9c0cf/68747470733a2f2f6769746875622d726561646d652d73746174732e76657263656c2e6170702f6170692f746f702d6c616e67732f3f757365726e616d653d42616c6f6e656f266c61796f75743d636f6d706163742662675f636f6c6f723d30443131313726746578745f636f6c6f723d464646464646266c616e67735f636f756e743d313026686964655f626f726465723d74727565" style="float:left"/></span></p><p>&nbsp;</p><ul><li><p><span>项目1：基于Vue.js、Flask、MQTT、ESP8266 的物联网监控系统</span></p><p><span>前端：前端主要使用 Vue.js 和 MQTT.js，基于 Materialize 实现了 Web ⻚面的响应式布局,通过MQTT.js 实时获取传感器数据。</span></p><p><span>后端：后端主要使用 Flask ,提供一些简单的接口。</span></p><p><span>网关：网关主要功能是将单片机的数据转发处理给 MQTT，通过 Select IO 多路复用实现从多个 TCP Client 中获取数据</span></p><ol start='' ><li><span>实现传感器数据在前端的实时展示(通过 MQTT 推送)</span></li><li><span>实现继电器的实时控制</span></li><li><span>实现响应式布局，移动端一样可以有很好的体验</span></li><li><span>实现报警发送邮件功能</span></li><li><span>实现定时、条件触发控制设备</span></li></ol><p><a href='https://github.com/Baloneo/OrangeIoT-FrontEnd' target='_blank' class='url'>https://github.com/Baloneo/OrangeIoT-FrontEnd</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_orange_iot.png" style="float: left; width: 600px; height: 300px"/></span></p></li></ul><p>&nbsp;</p><ul><li><p><span>项目2：LANC，局域网传输文件、聊天APP</span></p><p><span>在 Android 平台写一个基于 Socket 的可以实时聊天,显示局域网的联系人,传输文件, FTP 。</span>
<span>主要通过 TCP+UDP 协议实现客戶端之间的通信。</span></p><ol start='' ><li><span>实现传输文件</span></li><li><span>实现实时聊天</span></li><li><span>实现 FTP 服务器</span></li><li><span>自定义头像</span></li><li><span>消息通知栏显示</span></li><li><span>从 Bing 得到每日壁纸</span></li><li><span>删除聊天</span></li></ol><p><a href='https://github.com/Baloneo/LANC' target='_blank' class='url'>https://github.com/Baloneo/LANC</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_lanc01.png" style="float: left; width: 400px; height: 240px" /></span></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_lanc02.png" style="float: left; width: 400px; height: 640px" /></span></p><p>&nbsp;</p></li><li><p><span>项目3：实现Linux桌面平台下的网速、内存悬浮窗口程序</span></p><p><span>主要通过 C+Gtk+Cairo 实现 Linux 桌面平台的类似360悬浮小球的程序</span></p><ol start='' ><li><span>实现无窗边框、透明窗口</span></li><li><span>显示实时内存、网速信息</span></li><li><span>使用 Meson+Gtk构建</span></li><li><span>后台开机自启</span></li></ol><p><a href='https://github.com/Baloneo/network-ball-gtk' target='_blank' class='url'>https://github.com/Baloneo/network-ball-gtk</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_ball.gif" style="float: left"/></span></p><p>&nbsp;</p></li></ul><ul><li><p><span>项目4：在 Linux 下的 SSR 科学上网的图形化界面实现</span></p><ol start='' ><li><span>解析SSR订阅地址得到JSON配置文件</span></li><li><span>通过 subprocess 托管运行 ssr-local 进程</span></li><li><span>能够在任务托盘后台运行</span></li></ol><p><a href='https://github.com/Baloneo/ssr-gtk' target='_blank' class='url'>https://github.com/Baloneo/ssr-gtk</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_ssr-gtk.png" style="float: left; width:400px"/></span></p></li></ul><p>&nbsp;</p><ul><li><p><span>项目5：使用Go+Gtk实现Linux桌面平台下的网络调试助手</span></p><p><span>主要实现了TCP Server、TCP Client、UDP Server、UDP Client的图形化调试工具</span></p><ol start='' ><li><span>基于Go语言的Gtk的语言绑定实现</span></li><li><span>发送16进制字符、循环发送、发送本地文件、保存消息到本地文件</span></li></ol><p><a href='https://github.com/Baloneo/NetAssistant' target='_blank' class='url'>https://github.com/Baloneo/NetAssistant</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_net.png" style="float: left; width:500px"/></span></p></li></ul><p>&nbsp;</p><ul><li><p><span>项目6：Flutter灯光控制APP</span></p><p><span>主要通过 Flutter 发送 UDP 数据包控制局域网下 NodeMCU 中的继电器。</span></p><ol start='' ><li><span>实现 IP 地址、控制报文等信息的自定义和存储</span></li><li><span>实现发送 UDP 报文控制继电器</span></li></ol><p><a href='https://github.com/Baloneo/Lighting-Control-App' target='_blank' class='url'>https://github.com/Baloneo/Lighting-Control-App</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_light.webp" style="float: left; width: 300px; height: 540px"/></span></p></li></ul><p>&nbsp;</p></div>
</body>
</html>